www.gusucode.com > 第8章 自组织竞争神经网络-源码程序 > 第8章 自组织竞争神经网络-源码程序/mykohonen.m
% mykohonen.m %% 清空环境变量 clc,clear close all %% 样本数据 x0=[4.1,1.8,0.5,2.9,4.0,0.6,3.8,4.3,3.2,1.0,3.0,3.6,3.8,3.7,3.7,8.6,9.1,... 7.5,8.1,9.0,6.9,8.6,8.5,9.6,10.0,9.3,6.9,6.4,6.7,8.7;... 8.1,5.8,8.0,5.2,7.1,7.3,8.1,6.0,7.2,8.3,7.4,7.8,7.0,6.4,8.0,... 3.5,2.9,3.8,3.9,2.6,4.0,2.9,3.2,4.9,3.5,3.3,5.5,5.0,4.4,4.3]; %数据归一化 [x,m_x]=mapminmax(x0); x=x'; [nn,mm]=size(x); %% 参数 rng(0) %学习率 rate1max=0.8; rate1min=0.05; %学习半径 r1max=3; r1min=0.8; %% 网络构建 Inum=2; % M=1; M=2; N=2; K=M*N; %Kohonen总节点数 k=1; %Kohonen层节点排序 jdpx=zeros(M*N,2); for i=1:M for j=1:N jdpx(k,:)=[i,j]; k=k+1; end end %权值初始化 w1=rand(Inum,K); %第一层权值 %% 迭代求解 ITER=200; for i=1:ITER %自适应学习率和相应半径 rate1=rate1max-i/ITER*(rate1max-rate1min); r=r1max-i/ITER*(r1max-r1min); %随机抽取一个样本 k=randi(30); xx=x(k,:); %计算最优节点 [mindist,index]=min(dist(xx,w1)); %计算临域 d1=ceil(index/4); d2=mod(index,4); nodeindex=find(dist([d1,d2],jdpx')<r); %内星规则 for j=1:K if sum(nodeindex==j) w1(:,j)=w1(:,j)+rate1*(xx'-w1(:,j)); end end end %% 测试 Index=zeros(1,30); for i=1:30 [mindist,Index(i)]=min(dist(x(i,:),w1)); end %% 显示 x1=x0(:,Index==1); x2=x0(:,Index==2); x3=x0(:,Index==3); x4=x0(:,Index==4); plot(x1(1,:),x1(2,:),'ro');hold on plot(x2(1,:),x2(2,:),'k*'); plot(x3(1,:),x3(2,:),'b>'); plot(x4(1,:),x4(2,:),'mp'); title('聚类结果') legend('类别1','类别2','类别3','类别4') % legend('类别1','类别2') set(gcf,'color','w') box on